package br.unirio.parser;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Stack;

public class ParserEstilo {
	
	
	public static void main(String[] args) throws Exception {
		
		BufferedReader reader = new BufferedReader(new FileReader("src/br/unirio/parser/estilos.txt"));
		BufferedWriter writter = new BufferedWriter(new FileWriter("src/br/unirio/parser/script-estilo.txt"));
		String linha = reader.readLine();
		Estilo estilo =  parseString(linha);
		Estilo novoEstilo;
		Stack<Estilo> pilha = new Stack<Estilo>();
		// incluir no banco;
	//	System.out.println("Inserir estilo = "+estilo);
		writter.append("insert into Estilo(ID, Nome, IDSuperEstilo) values ( "+estilo.id+" , \""+estilo.estilo+"\" , null); \n");
		pilha.push(estilo);
		linha = reader.readLine();
		int hierarquia;
		while(linha != null)
		{
			hierarquia = Integer.parseInt(linha.split(" ")[0]);
			novoEstilo = parseString(linha);
			if(hierarquia > pilha.peek().hierarquia)
			{
	//			System.out.println("Inserir estilo = "+novoEstilo+"     estiloPai "+pilha.peek());
				writter.append("insert into Estilo(ID, Nome, IDSuperEstilo) values( "+novoEstilo.id+" , \""+
						novoEstilo.estilo+"\", "+pilha.peek().id+" ); \n");
				pilha.push(novoEstilo);

			}else if(hierarquia ==  pilha.peek().hierarquia)
			{
				desempilharAteId(pilha, hierarquia);
				//incluir no banco(estilo, pilha.peek()); (estilo, estiloPai)
				if(pilha.size () > 0){
		//			System.out.println("Inserir estilo = "+novoEstilo+"     estiloPai "+pilha.peek());
					writter.append("insert into Estilo(ID, Nome, IDSuperEstilo) values( "+novoEstilo.id+" , \""+
						novoEstilo.estilo+"\", "+pilha.peek().id+" ); \n");
				}
				else{
					writter.append("insert into Estilo(ID, Nome, IDSuperEstilo) values ( "+novoEstilo.id+" , \""+novoEstilo.estilo+"\" , null); \n");
				}
				pilha.push(novoEstilo);

			}else if(hierarquia < pilha.peek().hierarquia) 
			{
				desempilharAteId(pilha, hierarquia);
				Estilo aux = null;
				if(pilha.size() > 0)
				 aux = pilha.peek();
				
				if(aux != null){
					//incluir no banco(novoEstilo, aux)
			//		System.out.println("Inserir estilo = "+novoEstilo+"     estiloPai "+pilha.peek());
					writter.append("insert into Estilo(ID, Nome, IDSuperEstilo) values( "+novoEstilo.id+" , \""+
							novoEstilo.estilo+"\", "+pilha.peek().id+" ); \n");
					pilha.push(novoEstilo);
				}else {
					//incluir no banco (novoEstilo)
			//		System.out.println("Inserir estilo = "+novoEstilo);
					writter.append("insert into Estilo(ID, Nome, IDSuperEstilo) values ( "+novoEstilo.id+" , \""+novoEstilo.estilo+"\" , null); \n");
					pilha.push(novoEstilo);
				}
			}
			linha = reader.readLine();
		}
		writter.flush();
		
		
		
	}
	
	private static void desempilharAteId(Stack<Estilo> pilha, int hierarquia) {
		while(pilha.peek().hierarquia >= hierarquia)
		{
			if(pilha.size() > 0)
			pilha.pop();
			
			if(pilha.size() == 0)
				return;
		}
		
	}

	private static final Estilo parseString(String linha) {
		
		Estilo e = new Estilo();
		e.hierarquia = Integer.valueOf(linha.split(" ")[0]);
		e.id = Integer.valueOf(linha.split(" ")[1]);
		String estilo = "";
		String [] linhaSplit = linha.split(" ");
		for(int i= 2; i< linhaSplit.length; i++)
		{
			estilo += linhaSplit[i]+ " ";
		}
		e.estilo = estilo;
		
		
		return e;
		
		
	}

}